#include<stdio.h>
#include<stdlib.h>

int main()
{
	int size = 0;
	printf("请输入动态数组大小:\n");
	scanf("%d", &size);

	//1.动态分配内存
	int *pArr = (int*)malloc(size * sizeof(int));
	//2.使用前一定要判空
	if(pArr!=NULL){
		printf("分配内存成功!\n");
	    printf("首地地址: %p\n", pArr);
		for(int i=0; i<size; i++){
			pArr[i] = i;
		}
		for(int i=0; i<size; i++){
			printf("%d\t",pArr[i]);
		}
		printf("\n");

		//3.最后一定释放内存
		free(pArr);
        //虽然上一步释放了内存，但是pArr指向的地址不变，只不过这块内存系统可以给其他程序使用，那么就会有风险。
		*pArr = 100;
		printf("首地址值:%p\n", pArr);  //这里打印出的地址值和上面的完全一样!
		
		//4.释放了的指针一定要设置为NULL，这样就不可以再对它赋值(防止野指针)
		pArr = NULL;
		printf("首地址值:%p\n",pArr);
	}else{
		printf("分配内存失败!\n");
		return -1;
	}

	return 0;
}

